/************************************************************************/
/*																		*/
/*		School Hangover Project											*/
/*																		*/
/*		IMAC 2010														*/
/*		Author : 	Helena Duchaussoy									*/
/*					Isabelle Gouwy										*/
/*					Nathalie Kuoch										*/
/*					Franck Letellier									*/
/*					Louise Pequignot									*/
/*																		*/
/*		E-mail: flo-in-underware@googlegroups.com						*/
/*																		*/
/************************************************************************/

#ifndef __CAMERA_H__
#define __CAMERA_H__

#include <osg/io_utils>
#include <osg/CameraNode>
#include <GL/glu.h>

#include <stdio.h>
#include <string>
#include <iostream>

#include <osgGA/MatrixManipulator>
#include <osgViewer/Viewer>



class Engine;

class Camera : public osgGA::MatrixManipulator {
 
public :
 
     Camera();
	~Camera();
    virtual void setByMatrix(const osg::Matrixd& matrix);
 
            /// Set the position of the matrix manipulator using a 4x4 Matrix.
            virtual void setByInverseMatrix(const osg::Matrixd& matrix);
 
            /// \return Position and rotation of the manipulator as 4x4 Matrix.
            virtual osg::Matrixd getMatrix() const;
			
			virtual void setHomePosition (const osg::Vec3d &eye, const osg::Vec3d &center, const osg::Vec3d &up);
 
            /// \return Position and rotation of the manipulator as a inverse matrix of the manipulator, typically used as a model view matrix.
            virtual osg::Matrixd getInverseMatrix() const;

			virtual void computePosition(const osg::Vec3& eye,const osg::Vec3& lv,const osg::Vec3& up);
protected:
     
 
private:
 

 
 
};
 
#endif // __CAMERA_H__
